home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / dev / RCS / vmelink.h,v < prev    next >
Text File  |  1992-08-25  |  10KB  |  336 lines

  1. head     1.4;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    elm:1.4; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.4
  10. date     92.07.09.18.28.31;  author elm;  state Exp;
  11. branches ;
  12. next     1.3;
  13.  
  14. 1.3
  15. date     92.06.29.12.20.22;  author elm;  state Exp;
  16. branches ;
  17. next     1.2;
  18.  
  19. 1.2
  20. date     91.10.16.14.30.48;  author elm;  state Exp;
  21. branches ;
  22. next     1.1;
  23.  
  24. 1.1
  25. date     90.12.05.12.25.40;  author elm;  state Exp;
  26. branches ;
  27. next     ;
  28.  
  29.  
  30. desc
  31. @Include file for the VME link board.
  32. @
  33.  
  34.  
  35. 1.4
  36. log
  37. @Added ioctls for safe copying (using Mach_Probe to transfer data instead
  38. of actual pointer manipulation).  Slower but less likely to crash Sprite.
  39. @
  40. text
  41. @/*
  42.  * vmelink.h --
  43.  *
  44.  *    Declarations of interface to the Bit-3 VME link driver routines.
  45.  *
  46.  * Copyright 1990 Regents of the University of California
  47.  * Permission to use, copy, modify, and distribute this
  48.  * software and its documentation for any purpose and without
  49.  * fee is hereby granted, provided that the above copyright
  50.  * notice appear in all copies.  The University of California
  51.  * makes no representations about the suitability of this
  52.  * software for any purpose.  It is provided "as is" without
  53.  * express or implied warranty.
  54.  *
  55.  * $Header: /sprite/src/lib/include/dev/RCS/vmelink.h,v 1.3 92/06/29 12:20:22 elm Exp Locker: elm $ SPRITE (Berkeley)
  56.  */
  57.  
  58. #ifndef _VMELINK
  59. #define _VMELINK
  60.  
  61. /*
  62.  * Sun4 address space the link occupies (2=d16, 3=d32)
  63.  */
  64. #define DEV_VMELINK_ADDR_SPACE        2
  65.  
  66. /*
  67.  * Size of the VME link useful address space in pages.
  68.  */
  69. #define DEV_VMELINK_VME_START_ADDR    0xff400000
  70. #define DEV_VMELINK_VME_ADDR_SIZE    0x00020000
  71. #define DEV_VMELINK_NUM_PAGES        (VMELINK_VME_ADDR_SIZE / PAGSIZ)
  72.  
  73. /*
  74.  * Flags used to set the local command register.
  75.  */
  76. #define DEV_VMELINK_CLEAR_LOCAL_ERRS    0x80
  77. #define DEV_VMELINK_CLEAR_LOCAL_PF_INT    0x40
  78. #define DEV_VMELINK_SET_REMOTE_PT_INT    0x20
  79. #define DEV_VMELINK_DISABLE_LOCAL_INT    0x04
  80.  
  81. /*
  82.  * Flags in the status registers.
  83.  */
  84. #define DEV_VMELINK_PARITY_ERROR        0x80
  85. #define DEV_VMELINK_REMOTE_BUSERR        0x40
  86. #define DEV_VMELINK_LOCAL_PR_INT        0x20
  87. #define DEV_VMELINK_LOCAL_PT_INT        0x02
  88. #define DEV_VMELINK_REMOTE_DOWN            0x01
  89.  
  90. /*
  91.  * Flags used to set remote command register 1.
  92.  */
  93. #define DEV_VMELINK_REMOTE_RESET        0x80
  94. #define DEV_VMELINK_CLEAR_REMOTE_PT_INT        0x40
  95. #define DEV_VMELINK_SET_REMOTE_PR_INT        0x20
  96. #define DEV_VMELINK_LOCK_VME            0x10
  97. #define DEV_VMELINK_USE_PAGE_REG        0x08
  98.  
  99. /*
  100.  * Flags used to set remote command register 2.
  101.  */
  102. #define DEV_VMELINK_REMOTE_USE_ADDRMOD        0x40
  103. #define DEV_VMELINK_REMOTE_BLKMODE_DMA        0x20
  104. #define DEV_VMELINK_DISABLE_REMOTE_INT        0x10
  105.  
  106. /*
  107.  * Window size flags (for IOC_VMELINK_SET_WINDOW_SIZE IO control).
  108.  */
  109. #define DEV_VMELINK_WINDOW_SIZE_64K        0x00
  110. #define DEV_VMELINK_WINDOW_SIZE_128K        0x01
  111. #define DEV_VMELINK_WINDOW_SIZE_256K        0x03
  112. #define DEV_VMELINK_WINDOW_SIZE_512K        0x07
  113. #define DEV_VMELINK_WINDOW_SIZE_1M        0x0f
  114.  
  115. #define    DEV_VMELINK_MIN_DMA_SIZE    256
  116. #define    DEV_VMELINK_DMA_START        0x80
  117. #define    DEV_VMELINK_DMA_LONGWORD    0x10
  118. #define    DEV_VMELINK_DMA_LOCAL_PAUSE    0x08
  119. #define    DEV_VMELINK_DMA_ENABLE_INTR    0x04
  120. #define    DEV_VMELINK_DMA_DONE        0x02
  121. #define    DEV_VMELINK_DMA_BLOCK_MODE    0x01
  122. #define    DEV_VMELINK_DMA_LOCAL_TO_REMOTE    0x20
  123. #define    DEV_VMELINK_DMA_REMOTE_TO_LOCAL    0x00
  124.  
  125. /*
  126.  *    This is the control register structure for the VME link
  127.  *    boards.  All of the rsvX fields are listed as reserved in
  128.  *    the manual.
  129.  *
  130.  */
  131.  
  132. typedef struct DevVMElinkCtrlRegs {
  133.     volatile unsigned char rsv0;
  134.     volatile unsigned char LocalCmd;        /* local command register */
  135.     volatile unsigned char rsv1;
  136.     volatile unsigned char LocalStatus;        /* local status reg */
  137.     volatile unsigned char LocalAddrMod;    /* local addr modifier reg */
  138.     volatile unsigned char rsv3;
  139.     volatile unsigned char rsv4;
  140.     volatile unsigned char LocalIntrVec;    /* local intr vector reg */
  141.     volatile unsigned char RemoteCmd2;        /* remote command register 2 */
  142.     volatile unsigned char RemoteCmd1;        /* remote command register 1 */
  143.     volatile unsigned char RemotePageAddrHigh;    /* hi 8 bits remote pg addr */
  144.     volatile unsigned char RemotePageAddrLow;    /* low 8 bits remote pg addr */
  145.     volatile unsigned char RemoteAddrMod;    /* remote address modifier */
  146.     volatile unsigned char rsv5;
  147.     volatile unsigned char RemoteIackReadHigh;    /* intr acknowledge read hi */
  148.     volatile unsigned char RemoteIackReadLow;    /* intr acknowledge read low */
  149. } DevVMElinkCtrlRegs;
  150.  
  151. typedef struct DevVMElinkDmaRegs {
  152.     volatile unsigned char localDmaCmdReg;
  153.     volatile unsigned char rsv0;
  154.     volatile unsigned char localDmaAddr3;
  155.     volatile unsigned char localDmaAddr2;
  156.     volatile unsigned char localDmaAddr1;
  157.     volatile unsigned char localDmaAddr0;
  158.     volatile unsigned char dmaLength2;
  159.     volatile unsigned char dmaLength1;
  160.     volatile unsigned char rsv1;
  161.     volatile unsigned char rsv2;
  162.     volatile unsigned char remoteDmaAddr3;
  163.     volatile unsigned char remoteDmaAddr2;
  164.     volatile unsigned char remoteDmaAddr1;
  165.     volatile unsigned char remoteDmaAddr0;
  166.     volatile unsigned char rsv3;
  167.     volatile unsigned char rsv4;
  168. } DevVMElinkDmaRegs;
  169.  
  170. /*
  171.  * Used in the IOControl status call.
  172.  */
  173. typedef struct DevVMElinkStatus {
  174.     int LocalStatus;
  175.     int RemoteStatus;
  176. } DevVMElinkStatus;
  177.  
  178. /*
  179.  * Structure used to map VME bus addresses into kernel memory.
  180.  */
  181. typedef struct DevVMElinkMapRequest {
  182.     void *VMEAddress;        /* VME address to map */
  183.     int mapSize;        /* number of bytes to map in */
  184.     void *kernelAddress;    /* resulting kernel address */
  185. } DevVMElinkMapRequest;
  186.  
  187. #define    DEV_VMELINK_TO_REMOTE    0xf5
  188. #define    DEV_VMELINK_TO_LOCAL    0x3d
  189.  
  190. /*
  191.  * Used to access memory over the link board.
  192.  */
  193. typedef struct DevVMElinkAccessMem {
  194.     Address    destAddress;
  195.     int        size;
  196.     int        direction;
  197.     int        data[1];
  198. } DevVMElinkAccessMem;
  199.  
  200. #define IOC_VMELINK            (16 << 16)
  201.  
  202. /*
  203.  * These are the special VME link IO control calls.  They
  204.  * perform the following functions (and all constants start with
  205.  * IOC_VMELINK_).
  206.  *
  207.  * STATUS    return the link's status in the VMElinkStatus structure.
  208.  * PING_REMOTE    return SUCCESS if the remote link card is up
  209.  * MAP_MEMORY    map an area of memory specified by a VMElinkMapRequest struct
  210.  * NO_ADDRMOD    turn off the address modifier register
  211.  * SET_ADDRMOD    set the address modifier to use instead of the VME bus default
  212.  * NO_WINDOW    turn off the paging register on the link card
  213.  * SET_WINDOW    set the paging register on the link card and turn on paging
  214.  * SET_WINDOW_SIZE set the size of the paging register window
  215.  * LOW_VME    seeks refer to addresses 0-7fffffff
  216.  * HIGH_VME    seeks refer to addresses 8000000-ffffffff
  217.  * DEBUG_ON    turns on debugging statements for the VME link driver
  218.  * DEBUG_OFF    turns off debugging statements
  219.  */
  220. #define IOC_VMELINK_STATUS        (IOC_VMELINK | 1)
  221. #define IOC_VMELINK_DEBUG_ON        (IOC_VMELINK | 2)
  222. #define IOC_VMELINK_DEBUG_OFF        (IOC_VMELINK | 3)
  223. #define IOC_VMELINK_PING_REMOTE        (IOC_VMELINK | 4)
  224. #define IOC_VMELINK_NO_ADDRMOD        (IOC_VMELINK | 5)
  225. #define IOC_VMELINK_SET_ADDRMOD        (IOC_VMELINK | 6)
  226. #define IOC_VMELINK_LOW_VME        (IOC_VMELINK | 7)
  227. #define IOC_VMELINK_HIGH_VME        (IOC_VMELINK | 8)
  228. #define    IOC_VMELINK_READ_BOARD_STATUS    (IOC_VMELINK | 9)
  229. #define    IOC_VMELINK_RESET        (IOC_VMELINK | 10)
  230. #define    IOC_VMELINK_READ_REG        (IOC_VMELINK | 11)
  231. #define    IOC_VMELINK_WRITE_REG        (IOC_VMELINK | 12)
  232. #define    IOC_VMELINK_ACCESS_REMOTE_MEMORY (IOC_VMELINK | 13)
  233. #define    IOC_VMELINK_SAFE_COPY_ON    (IOC_VMELINK | 14)
  234. #define    IOC_VMELINK_SAFE_COPY_OFF    (IOC_VMELINK | 15)
  235.  
  236. #endif /* _VMELINK */
  237. @
  238.  
  239.  
  240. 1.3
  241. log
  242. @This version works with the kernel that supports slow copying (no DMA).
  243. @
  244. text
  245. @d15 1
  246. a15 1
  247.  * $Header: /sprite/src/kernel/dev/sun4.md/RCS/vmelink.h,v 1.1 91/09/18 12:39:35 jhh Exp Locker: elm $ SPRITE (Berkeley)
  248. d193 2
  249. @
  250.  
  251.  
  252. 1.2
  253. log
  254. @Changed vme link device # to 16 (from 13).
  255. @
  256. text
  257. @d15 1
  258. a15 1
  259.  * $Header: /sprite/src/lib/include/dev/RCS/vmelink.h,v 1.1 90/12/05 12:25:40 elm Exp Locker: elm $ SPRITE (Berkeley)
  260. d22 5
  261. d29 3
  262. a31 3
  263. #define VMELINK_VME_START_ADDR        0xff400000
  264. #define VMELINK_VME_ADDR_SIZE        0x00020000
  265. #define VMELINK_NUM_PAGES        (VMELINK_VME_ADDR_SIZE / PAGSIZ)
  266. d36 4
  267. a39 4
  268. #define VMELINK_CLEAR_LOCAL_ERRS    0x80
  269. #define VMELINK_CLEAR_LOCAL_PF_INT    0x40
  270. #define VMELINK_SET_REMOTE_PT_INT    0x20
  271. #define VMELINK_DISABLE_LOCAL_INT    0x04
  272. d44 5
  273. a48 5
  274. #define VMELINK_PARITY_ERROR        0x80
  275. #define VMELINK_REMOTE_BUSERR        0x40
  276. #define VMELINK_LOCAL_PR_INT        0x20
  277. #define VMELINK_LOCAL_PT_INT        0x02
  278. #define VMELINK_REMOTE_DOWN        0x01
  279. d53 5
  280. a57 5
  281. #define VMELINK_REMOTE_RESET        0x80
  282. #define VMELINK_CLEAR_REMOTE_PT_INT    0x40
  283. #define VMELINK_SET_REMOTE_PR_INT    0x20
  284. #define VMELINK_LOCK_VME        0x10
  285. #define VMELINK_USE_PAGE_REG        0x08
  286. d62 3
  287. a64 3
  288. #define VMELINK_REMOTE_USE_ADDRMOD    0x40
  289. #define VMELINK_REMOTE_BLKMODE_DMA    0x20
  290. #define VMELINK_DISABLE_REMOTE_INT    0x10
  291. d69 60
  292. a128 5
  293. #define VMELINK_WINDOW_SIZE_64K        0x00
  294. #define VMELINK_WINDOW_SIZE_128K    0x01
  295. #define VMELINK_WINDOW_SIZE_256K    0x03
  296. #define VMELINK_WINDOW_SIZE_512K    0x07
  297. #define VMELINK_WINDOW_SIZE_1M        0x0f
  298. d133 1
  299. a133 1
  300. typedef struct VMElinkStatus {
  301. d136 1
  302. a136 1
  303. } VMElinkStatus;
  304. d141 1
  305. a141 1
  306. typedef struct VMElinkMapRequest {
  307. d145 1
  308. a145 1
  309. } VMElinkMapRequest;
  310. d147 13
  311. d162 31
  312. a192 8
  313. #define IOC_VMELINK_STATUS        (IOC_VMELINK | 0x1)
  314. #define IOC_VMELINK_PING_REMOTE        (IOC_VMELINK | 0x3)
  315. #define IOC_VMELINK_MAP_MEMORY        (IOC_VMELINK | 0x4)
  316. #define IOC_VMELINK_NO_ADDRMOD        (IOC_VMELINK | 0x5)
  317. #define IOC_VMELINK_SET_ADDRMOD        (IOC_VMELINK | 0x6)
  318. #define IOC_VMELINK_NO_WINDOW        (IOC_VMELINK | 0x7)
  319. #define IOC_VMELINK_SET_WINDOW        (IOC_VMELINK | 0x8)
  320. #define IOC_VMELINK_SET_WINDOW_SIZE    (IOC_VMELINK | 0x9)
  321. @
  322.  
  323.  
  324. 1.1
  325. log
  326. @Initial revision
  327. @
  328. text
  329. @d15 1
  330. a15 1
  331.  * $Header: /sprite/src/kernel/dev.elm/sun4.md/RCS/vmelink.h,v 1.1 90/06/28 23:44:46 elm Exp Locker: elm $ SPRITE (Berkeley)
  332. d87 1
  333. a87 1
  334. #define IOC_VMELINK            (13 << 16)
  335. @
  336.